package me.zhengjie.modules.management.mapper;

import me.zhengjie.modules.management.domain.ConferenceRecord;
import me.zhengjie.modules.management.domain.ConferenceRoom;
import me.zhengjie.modules.management.domain.ConferenceType;
import me.zhengjie.modules.management.service.dto.*;
import org.apache.ibatis.annotations.Mapper;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

@Mapper
public interface ConferenceRecordMapper {

    /**
     * 查询教室预约列表
     *
     * @param conferenceRecordQueryCriteria
     * @return me.zhengjie.modules.management.domain.ConferenceRecord
     */
    List<RecordDto> searchRecord(ConferenceRecordQueryCriteria conferenceRecordQueryCriteria);

    /**
     * 获取状态还在审批中的会议（对接OA用）
     * @return
     */
    List<RecordDto> findRecord();

    /**
     * 查询教室预约报表
     *
     * @param conferenceRecordQueryCriteria
     * @return me.zhengjie.modules.management.domain.ConferenceRecord
     */
    List<RecordDto> queryByCriteria(ConferenceRecordQueryCriteria conferenceRecordQueryCriteria);

    /**
     * 添加教室预约
     *
     * @param recordDto
     * @return void
     */
    void insertConferenceRecord(RecordDto recordDto);

    /**
     * 更新预约信息
     *
     * @param conferenceRecordDto
     * @return void
     */
    void updateConferenceRecord(ConferenceRecordDto conferenceRecordDto);

    /**
     * 查询开始时间是今天或者之前、结束时间是当前时间之后的会议
     * @return
     */
    List<ConferenceRecord> getTodayRecord();


    /**
     * 查询结束时间在本周(大于第一天小于最后一天) 或者 开始时间在本周结束时间在下周的会议
     * @return
     */
    List<ConferenceRecord> getWeekRecord();


    String getWeekFirstDay();

    /**
     * 本周最后一天
     * @return
     */
    String getWeekLastDay();

    /**
     * 下周第一天
     * @return
     */
    String getNextWeekFirstDay();

    List<RecordDto> findById(Integer recordId);

    ConferenceRecord queryById(Integer recordId);

    BigDecimal getTime(Integer recordId);

    Integer IsFree(TimeDto timeDto);

    /**
     * 删除会议记录
     */
    void deleteRecord(Integer recordId);

    Integer findApplicantIdByRecordId(Integer recordId);

    /**
     * 通过OA标识获取会议记录
     * @return
     */
    ConferenceRecord getRecordByRequestId(Integer requsetId);

    /**
     * 根据id修改会议审批状态
     * @param conferenceRecord
     */
    void updateRecord(ConferenceRecord conferenceRecord);

    void updateRecordById(RecordDto recordDto);

    /**
     * 根据会议记录获取标识
     * @param recordId
     * @return
     */
    Integer findRequestId(Integer recordId);


    /**
     * 新增预约时，对基础费用和物资费用插入
     * @param conferenceRecord
     */
    void updateCost(ConferenceRecord conferenceRecord);

    /**
     * 获取此教室开始时间是这个会议开始时间之后的会议的开始时间
     * @return
     */
    List<Timestamp> getNextBegainTime(ConferenceRecordDto conferenceRecordDto);
    List<Timestamp> findNextBegainTime(ConferenceRecord conferenceRecord);
}
